import { NestFactory } from '@nestjs/core'
import 'dotenv/config'
import { AppModule } from '@/app.module'
import { ResponseInterceptor } from '@/common/interceptors/response.interceptor'
import { ValidationPipe } from '@nestjs/common'
import { ConfigService } from '@nestjs/config'

async function bootstrap() {
	// 创建混合应用
	const app = await NestFactory.create(AppModule)
	const configService = app.get(ConfigService)
	const { port, globalPrefix, baseUrl } = configService.get('app', { infer: true })

	// 设置路由前缀
	app.setGlobalPrefix(globalPrefix)
	// 响应格式拦截器
	app.useGlobalInterceptors(new ResponseInterceptor())
	// 异常过滤器
	// app.useGlobalFilters(new HttpExceptionFilter())
	// 全局验证
	app.useGlobalPipes(
		new ValidationPipe({
			transform: true,
		})
	)

	await app.listen(port)

	console.log('Application is running on: ' + baseUrl)
}
bootstrap()

// 全局执行顺序：
// 1. 中间件
// 2. 守卫
// 3. 响应拦截器
// 4. 管道
// 5. 异常过滤器
// 6. controller
